package com.bing.common;

import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 聊天消息
 */
@Data
public class Message implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 消息ID
     */
    private String id;

    /**
     * 发送者用户名
     */
    private String sender;

    /**
     * 接收者用户名（如果是私聊）
     */
    private String receiver;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 发送时间
     */
    private Date sendTime;

    /**
     * 消息类型
     */
    private MessageType type;

    /**
     * 用户名 - 兼容旧版本
     */
    private String username;

    /**
     * 密码 - 兼容旧版本
     */
    private String password;

    /**
     * 新密码（用于修改密码）- 兼容旧版本
     */
    private String newPassword;

    /**
     * 历史消息列表 - 兼容旧版本
     */
    private List<Message> historyMessages;

    /**
     * 在线用户数 - 兼容旧版本
     */
    private int onlineCount;

    /**
     * 在线用户列表 - 兼容旧版本
     */
    private List<String> onlineUsers;

    public Message() {
        this.sendTime = new Date();
    }

    public Message(String sender, String content) {
        this.sender = sender;
        this.content = content;
        this.sendTime = new Date();
        this.type = MessageType.CHAT_MESSAGE;
    }

    public Message(String sender, String receiver, String content) {
        this.sender = sender;
        this.receiver = receiver;
        this.content = content;
        this.sendTime = new Date();
        this.type = MessageType.CHAT_MESSAGE;
    }

    /**
     * 创建系统消息
     * 
     * @param content 消息内容
     * @return 系统消息
     */
    public static Message createSystemMessage(String content) {
        Message message = new Message();
        message.setSender("系统");
        message.setContent(content);
        message.setType(MessageType.SYSTEM_MESSAGE);
        return message;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Message{");
        sb.append("type=").append(type);
        sb.append(", sender='").append(sender).append('\'');
        if (receiver != null)
            sb.append(", receiver='").append(receiver).append('\'');
        sb.append(", content='").append(content).append('\'');
        if (username != null)
            sb.append(", username='").append(username).append('\'');
        if (password != null)
            sb.append(", password='").append("******").append('\'');
        sb.append(", sendTime=").append(sendTime);
        sb.append('}');
        return sb.toString();
    }
}